package com.company.ljh.easy;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;

/**
 * @description:2215. 找出两数组的不同
 * 提示
 * 简单
 * 24
 * 相关企业
 * 给你两个下标从 0 开始的整数数组 nums1 和 nums2 ，请你返回一个长度为 2 的列表 answer ，其中：
 *
 * answer[0] 是 nums1 中所有 不 存在于 nums2 中的 不同 整数组成的列表。
 * answer[1] 是 nums2 中所有 不 存在于 nums1 中的 不同 整数组成的列表。
 * 注意：列表中的整数可以按 任意 顺序返回。
 * @projectName:leet_code
 * @see:com.company.ljh.easy
 * @author:ljh
 * @createTime:2023/7/3 11:32
 * @version:1.0
 */
public class 找出两数组的不同 {
    //哈希表，注意要保证同一个数出现多次的情况
    public List<List<Integer>> findDifference(int[] nums1, int[] nums2) {
        List<List<Integer>> result = new ArrayList();
        List<Integer> nums1Result = new ArrayList();
        List<Integer> nums2Result = new ArrayList();
        HashSet<Integer> set1 = new HashSet();
        HashSet<Integer> set2 = new HashSet();
        for(int num2 : nums2){
            set2.add(num2);
        }
        for(int num1 : nums1){
            if(set2.contains(num1)){
                set2.remove(num1);
            }else if (!set1.contains(num1)){
                nums1Result.add(num1);
            }
            //保存已经出现过的元素，防止重复添加
            set1.add(num1);

        }
        set2.forEach(v->nums2Result.add(v));
        result.add(nums1Result);
        result.add(nums2Result);

        return result;
    }
}
